Search

在 SQL Server 中無論是在 WHERE 或是 JOIN ON 用來做為條件的參數「型態」,...

  • Share this:

在 SQL Server 中無論是在 WHERE 或是 JOIN ON 用來做為條件的參數「型態」,最好要一模一樣,今天早上就遇到了一個跑到不良執行計劃的案例。

Y.ID 跟 nrs.NxxxId,一個是 INT,一個 BIGINT,當我不針對 Y.ID 強制轉型為 BIGINT 時,可以看到它實際資料列數目高達 281114202 筆,比我家電話號碼還長,把 Y.ID 強制轉型為 BIGINT 之後,實際資料列數目降到 84027。

總結來說,SQL Server 的資料欄位型態是需要嚴謹的定義,不能把可以相容的兩種欄位型態看成是一樣的,像是 varchar、nvarchar 也很容易被當成是同種類的型態拿來做條件比較,執行計劃產生器可不這樣認為,所以拿來當成條件的欄位型態最好一定要一模一樣。

最後附上 varchar、nvarchar 的案例:https://dotblogs.com.tw/supershowwei/2019/08/12/232213


Tags:

About author
not provided
軟體跟料理一樣,都變成了每人每天的生活必需品。
View all posts